#ifndef TRIE_H
#define TRIE_H

#ifndef MY_DATA_STRUCTURE_NAMESPACE_BEGIN
#define MY_DATA_STRUCTURE_NAMESPACE_BEGIN namespace myds {
#endif // !MY_DATA_STRUCTURE_NAMESPACE_BEGIN

#ifndef MY_DATA_STRUCTURE_NAMESPACE_END
#define MY_DATA_STRUCTURE_NAMESPACE_END }
#endif // !MY_DATA_STRUCTURE_NAMESPACE_END

#include <unordered_map>
#include <vector>
#include <string>

MY_DATA_STRUCTURE_NAMESPACE_BEGIN
class Trie
{
protected:
	std::unordered_map<char, myds::Trie*> children;
	bool if_end;
public:
	Trie();
	~Trie();
public:
	myds::Trie* search(const std::string& prefix);
	void insert(const std::string& word);
	void getSuffix(std::vector<std::string>& all_suffix);
};
MY_DATA_STRUCTURE_NAMESPACE_END

#endif // !TRIE_H
